package com.social.service;

import com.social.dao.FriendDAO;
import com.social.model.Friend;
import com.social.model.User;
import java.util.List;

/**
 * 好友服务类
 */
public class FriendService {
    private FriendDAO friendDAO = new FriendDAO();

    /**
     * 添加好友请求
     * @param userId 发起请求的用户ID
     * @param friendUserId 接收请求的用户ID
     * @return 是否成功
     */
    public boolean sendFriendRequest(int userId, int friendUserId) {
        // 检查是否已经是好友或已发送请求
        if (isFriend(userId, friendUserId) || hasPendingRequest(userId, friendUserId)) {
            return false;
        }

        Friend friend = new Friend();
        friend.setUserId(userId);
        friend.setFriendUserId(friendUserId);
        friend.setStatus(Friend.STATUS_PENDING);
        friend.setRequestTime(new java.util.Date());

        return friendDAO.addFriendRequest(friend);
    }

    /**
     * 接受好友请求
     * @param friendId 好友关系ID
     * @return 是否成功
     */
    public boolean acceptFriendRequest(int friendId) {
        return friendDAO.updateFriendStatus(friendId, Friend.STATUS_ACCEPTED);
    }

    /**
     * 拒绝好友请求
     * @param friendId 好友关系ID
     * @return 是否成功
     */
    public boolean rejectFriendRequest(int friendId) {
        return friendDAO.updateFriendStatus(friendId, Friend.STATUS_REJECTED);
    }

    /**
     * 删除好友关系
     * @param friendId 好友关系ID
     * @return 是否成功
     */
    public boolean deleteFriend(int friendId) {
        return friendDAO.deleteFriend(friendId);
    }

    /**
     * 获取用户的好友列表
     * @param userId 用户ID
     * @return 好友列表
     */
    public List<Friend> getFriendList(int userId) {
        return friendDAO.getFriendList(userId);
    }

    /**
     * 获取用户的好友请求列表
     * @param userId 用户ID
     * @return 好友请求列表
     */
    public List<Friend> getFriendRequests(int userId) {
        return friendDAO.getFriendRequests(userId);
    }

    /**
     * 搜索用户
     * @param userId 当前用户ID
     * @param keyword 搜索关键词
     * @param filter 过滤条件
     * @return 搜索结果列表
     */
    public List<User> searchUsers(int userId, String keyword, String filter) {
        return friendDAO.searchUsers(userId, keyword, filter);
    }

    /**
     * 获取随机推荐用户
     * @param userId 当前用户ID
     * @param limit 返回数量限制
     * @return 推荐用户列表
     */
    public List<User> getRandomRecommendUsers(int userId, int limit) {
        return friendDAO.getRandomRecommendUsers(userId, limit);
    }

    /**
     * 获取共同好友推荐
     * @param userId 当前用户ID
     * @param limit 返回数量限制
     * @return 共同好友推荐列表
     */
    public List<User> getMutualFriendRecommendations(int userId, int limit) {
        return friendDAO.getMutualFriendRecommendations(userId, limit);
    }

    /**
     * 根据条件获取推荐用户
     * @param userId 当前用户ID
     * @param condition 推荐条件
     * @param limit 返回数量限制
     * @return 推荐用户列表
     */
    public List<User> getConditionRecommendations(int userId, String condition, int limit) {
        return friendDAO.getConditionRecommendations(userId, condition, limit);
    }

    /**
     * 检查两个用户是否是好友
     * @param userId1 用户1 ID
     * @param userId2 用户2 ID
     * @return 是否是好友
     */
    private boolean isFriend(int userId1, int userId2) {
        return friendDAO.isFriend(userId1, userId2);
    }

    /**
     * 检查是否有未处理的好友请求
     * @param userId1 用户1 ID
     * @param userId2 用户2 ID
     * @return 是否有未处理的请求
     */
    private boolean hasPendingRequest(int userId1, int userId2) {
        return friendDAO.hasPendingRequest(userId1, userId2);
    }
}